package com.cn.gmall.product.controller;



import com.cn.gmall.common.execption.GmallException;
import com.cn.gmall.common.result.Result;
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

@RestController
@RequestMapping("/admin/product")
@SuppressWarnings("all")//抑制所有的警告

public class FileUpLoadController {
    /**
     * 发送的地址
     */
    @Value("${minio.endpointUrl}")
    private String endpointUrl; //存放的地址

    @Value("${minio.accessKey}")
    private String accessKey;   //账号

    @Value("${minio.secreKey}")
    private String secreKey; //密码
    /**
     * 创建minio桶的名字
     */
    @Value("${minio.bucketName}")
    private String bucketName;


    /***
     * 文件上传管理
     * @param file
     * @return
     */
    @ApiOperation("上传图片")
    @PostMapping("/fileUpload")
    public Result fileUp(MultipartFile file) {
        String fileUrl = null;

        try {
            // Create a minioClient with the MinIO server playground, its access key and secret key.
            MinioClient minioClient =
                    MinioClient.builder()
                            .endpoint(endpointUrl)
                            .credentials(accessKey, secreKey)
                            .build();


            // 查询是否存在一个 bucketName名字的桶  不存在就创建
            boolean found =
                    minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
            if (!found) {
                // 不存在就穿件一个名为 bucketName的 一个桶
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            } else {


                System.out.println("Bucket 'asiatrip' already exists.");
            }

          /*  // Upload an JSON file.将文件中的内容作为存储桶中的对象上传。
            minioClient.uploadObject(
                    UploadObjectArgs.builder()
                            .bucket(bucketName).object("my-objectname").filename("person.json").build());*/
/*将文件中的内容作为存储桶中的对象上传。
// Upload a video file.
            minioClient.uploadObject(
                    UploadObjectArgs.builder()
                            .bucket(bucketName)
                            .object("my-objectname")
                            .filename("my-video.avi")
                            .contentType("video/mp4")
                            .build());*/
//           文件名字

            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss-");
            LocalDateTime dateTime = LocalDateTime.now();
            String upTime = dateTime.format(dateTimeFormatter).toString();

            String fileName = upTime + UUID.randomUUID().toString().replaceAll("-", "").substring(0, 3) + file.getName();
            // Upload known sized input stream. 将给定的流作为存储桶中的对象上传。
            minioClient.putObject(
                    PutObjectArgs.builder().bucket(bucketName).object(fileName).stream(
                                    file.getInputStream(), file.getSize(), -1)
                            .contentType(file.getContentType())
                            .build());

//            返回上传的图片的地址
            fileUrl = endpointUrl + "/" + bucketName + "/" + fileName;

        } catch (Exception e) {
            throw new GmallException("文件上传出错", 2001);
        }


        return Result.ok(fileUrl);
    }

}
